Integrated circuits such as System On Chip (SOC) integrated circuits provide debugging ports such that the integrated circuit may be checked, that is, debugged by appropriate hardware and software connecting to the integrated circuit via debugging ports. For example, IEEE 1149.1, “Standard Test Access Port and Boundary Scan Architecture,” which is commonly referred to as the “JTAG” (Joint Test Action Group) standard, originally defined test access ports for printed circuit board testing but is now used extensively for integrated circuits. Debug ports such as those defined by the JTAG Standard may allow access to various sub-blocks of the integrated circuit such as memory, registers and flip flops of the device, all of which may store proprietary software or other confidential information.
Debug ports such as JTAG debug ports may also allow a user to load code onto an integrated circuit or various sub-blocks of the integrated circuit and run those code portions in order to implement various debugging functions. However, as would be understood by one of ordinary skill, these features may also enable hackers or other malicious users to run unauthorized code on the integrated circuit or to control various integrated circuit sub-blocks and thereby extract confidential and proprietary software or other information.
As would be understood by one of ordinary skill, software may be loaded into the integrated circuit via a debug port for the purposes of rebooting the integrated circuit. By booting the integrated circuit with a malicious code, a hacker may be able to gain access to various data stored on the integrated circuit, or stored in the platform on which the integrated circuit resides, that would not otherwise be accessible.
Therefore, it would be desirable to verify any code loaded into an integrated circuit or its sub-blocks via any debug ports. Particularly it would be desirable to verify any that may be used for booting the integrated circuit.
At the same time authorized debuggers should have the capability to install and run appropriate debugging software on the integrated circuit or any of its components as needed in order to run tests on the integrated circuit.